package com.springsource.a09Proxy.cglib;

import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;

public class A09CglibProxy {

    public static class Target {
        public void sayHello() {
            System.out.println("hello");
        }
    }


    public static void main(String[] args) {
        Target proxy = (Target) Enhancer.create(Target.class, (MethodInterceptor) (p, method, args1, proxyMethod) -> {
            System.out.println("before");
            // 通过反射
//            Object result = method.invoke(new Target(), args1);
            // 不通过反射，但需要目标对象（Spring用的方式）
//            Object result = proxyMethod.invoke(new Target(), args1);
            // 不通过反射，不需要目标对象
            Object result = proxyMethod.invokeSuper(p, args1);
            System.out.println("after");
            return result;
        });
        proxy.sayHello();

    }

}
